package com.example.jedis.client.command.key;

public interface RedisKeyCommand {
    /**
     *  删除给定的一个或多个 key 。
     *  不存在的 key 会被忽略。
     *
     *  Command: [del] [user.name.110]  : [1]
     *  write :[*2\r\n$3\r\ndel\r\n$13\r\nuser.name.110\r\n]
     *  read :[:1\r\n]
     *  Command: [del] [notExistKey]  : [0]
     *  write :[*2\r\n$3\r\ndel\r\n$11\r\nnotExistKey\r\n]
     *  read :[:0\r\n]

     * @param key
     * @return 被删除 key 的数量 ,可能为0
     */
    public Integer del(String ...key);

    /**
     * 检查给定 key 是否存在。
     * 若 key 存在，返回 1 ，否则返回 0 。
     * @param key
     * @return
     */
    public Integer exists(String key);

    /**
     * 以秒为单位，返回给定 key 的剩余生存时间(TTL, time to live)
     *
     * Command: [ttl] [user.name.110] : [-1]
     * write :[*2\r\n$3\r\nttl\r\n$13\r\nuser.name.110\r\n]
     * read :[:-1\r\n]
     *
     *  Command: [ttl] [notExistKey] : [-2]
     *  write :[*2\r\n$3\r\nttl\r\n$11\r\nnotExistKey\r\n]
     *  read :[:-2\r\n]
     *
     *  Command: [ttl] [user.name.110]  : [5]
     *  write :[*2\r\n$3\r\nttl\r\n$13\r\nuser.name.110\r\n]
     *  read :[:5\r\n]
     *

     * @param key
     * @return  当 key 不存在时，返回 -2 。  当 key 存在但没有设置剩余生存时间时，返回 -1 。 否则，以秒为单位，返回 key 的剩余生存时间。
     */
    public Integer ttl(String key);
}
